#!/bin/bash
###
# @Author: Logan.Li
# @Date: 2025-09-05 10:21:09
# @LastEditTime: 2025-09-09 00:55:14
# @Description: Shell脚本简洁模板 - 短小精悍，实用为主
###
# @支持系统: RHEL/CentOS/Rocky/AlmaLinux/Amazon Linux 2/Amazon Linux 2023/Debian/Ubuntu
###
# curl -s https://gitee.com/attacker/All-In-One-Ops/raw/master/1.scripts/shell-template.sh | bash

# 基础设置
set -e  # 遇到错误立即退出

# 路径定义
DOWNLOAD_DIR="/usr/local/src"    # 下载包存放路径
INSTALL_DIR="/opt"               # 服务安装路径  
ENV_DIR="/usr/local"             # 环境依赖路径

# 简洁输出函数
info() { echo -e "\e[34m[INFO]\e[0m $1"; }
warn() { echo -e "\e[33m[WARN]\e[0m $1"; }
error() { echo -e "\e[31m[ERROR]\e[0m $1" >&2; }
success() { echo -e "\e[32m[SUCCESS]\e[0m $1"; }

# 判断是否root用户
if [ $(id -u) -ne 0 ]; then
    color_msg error "### This script must be run as root !!!"
    exit 1
fi


# 检查文件是否存在，存在则跳过下载
download_if_not_exists() {
    local url="$1"
    local file="$2"
    
    [[ ! -d "$(dirname "$file")" ]] && mkdir -p "$(dirname "$file")"
    
    if [[ -f "$file" ]]; then
        warn "文件已存在，跳过下载: $file"
        return 0
    fi
    
    info "下载: $url"
    if curl -fsSL -o "$file" "$url"; then
        success "下载完成: $file"
    else
        error "下载失败: $url"
        return 1
    fi
}

# 检查命令是否存在
check_command() {
    local cmd="$1"
    if ! command -v "$cmd" &> /dev/null; then
        error "缺少命令: $cmd"
        return 1
    fi
}

# 检查并安装依赖
install_dependency() {
    local name="$1"
    local check_cmd="$2"
    local install_url="$3"
    
    info "检查 $name..."
    if command -v "$check_cmd" &> /dev/null; then
        success "$name 已安装"
        return 0
    fi
    
    warn "$name 未安装，开始安装..."
    curl -s "$install_url" | bash
}

# 安装打印可以参考类似
[INFO] 开始检查Java依赖...
[WARN] Java 未安装，需要安装JDK17...
[INFO] JDK17安装过程包括：
[INFO] 1. 检测网络环境和镜像源
[INFO] 2. 下载JDK17安装包（约200MB，显示进度条）
[INFO] 3. 解压和配置环境变量
[INFO] 4. 验证安装结果
[INFO] 
[INFO] 开始安装JDK17，请耐心等待...
[INFO] 下载安装脚本: https://gitee.com/attacker/All-In-One-Ops/raw/master/1.scripts/env/jdk17.sh
[INFO] 检测在中国地区，将使用华为云镜像源。
[INFO] 创建安装目录 /data/jdk-17
[INFO] 开始下载 JDK 17 安装包...